// StateComponent.java
package org.zjx.core.state;

/**
 * 状态组件接口
 *
 * 这个接口定义了状态组件的基本行为，包括获取组件ID、重置状态、创建副本等方法。
 * 所有状态组件都需要实现这个接口，以便在状态管理系统中被统一管理。
 */
public interface StateComponent {

    /**
     * 重置状态
     *
     * 将组件状态重置为初始状态。
     */
    void reset();

    /**
     * 创建副本
     *
     * 创建当前组件的一个深拷贝，用于状态快照或回滚等操作。
     *
     * @return 组件的副本
     */
    StateComponent copy();

    /**
     * 获取状态类型
     *
     * 默认实现返回组件类的简单名称作为状态类型。
     *
     * @return 状态类型的字符串表示
     */
    default String getStateType() {
        return this.getClass().getSimpleName();
    }
}